#include <iostream>
#include "ONNXClassifier.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/dnn/dnn.hpp>
using namespace std;

void help();

int main(int argc, char const *argv[])
{
	if (argc != 2) //判断命令行输入参数个数是否为2（程序名与测试图像路径）
	{
		help();
		return -1;
	}

	string model_path("../LeNet.onnx"); //onnx网络模型文件路径
	string label_path("../labels.txt"); //labels文本文件路径
	//网络模型输入尺寸（要与模型的输入尺寸相匹配，在设置网络模型的输入前，会根据此变量使用blobFromImage进行reshape）
	cv::Size input_size(28, 28);
	try
	{
		cv::Mat test_image = cv::imread(argv[1]);					   //读取图像
		ONNXClassifier classifier(model_path, label_path, input_size); //构造类的对象，根据参数会构造网络模型，读取label文本文件
		string result;												   //输出结果
		classifier.Classify(test_image, result);					   //调用Classify方法得到识别分类结果
		cout << "result: " << result << endl;						   //输出识别分类结果
	}
	catch (const std::exception &e)
	{
		std::cerr << e.what() << '\n'; //输出异常情况
		help();
		return -1;
	}

	cout << "程序运行成功，无报错" <<endl;
	return 0;
}

void help()
{
	cout << "请阅读README文档 需输入测试图像的路径" << endl;
}